package SwordOffer2;

import java.util.HashMap;

public class day5_3 {
    /*
    * 滑动窗口：
    * 1.创建一个hashmap用于记录不重复的字母和左指针left的下标
    * 2.创建两个指针left，right初值0；循环数组，移动右指针，判断hashmap是否包含当前字母
    *   若包含，左指针移动（判断left与hashmap中当前字母的下标+1的值大小，left取较大的值，left移动不能逆向）
    *   若不包含，hashmap保存当前right指向的字母
    * 3.返回值res记录右指针与左指针之间的窗口长度的最大值
    * */
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        int left = 0;
        int res = 0;
        map.put(null, 0);
        for (int right = 0; right < s.length(); right++) {
            if (map.containsKey(s.charAt(right))) {
                left = Math.max(left, map.get(s.charAt(right)) + 1);
                map.put(s.charAt(right), right);
            }
            //System.out.println(right + " r l " + left);
            res = Math.max(res, right + 1 - left);
            map.put(s.charAt(right), right);
        }
        return res;
    }

}
